#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>



// 不使用命令行参数也可以查看环境变量
int main()
{

    extern char** environ;

    int i = 0;
    for(; environ[i]; i++)
    {
        printf("environ[[%d]-> %s\n", i, environ[i]);
    }


    return 0;
}

// 内建命令 命令不创建子进程，直接在本Bash内执行
//int main(int argc, char* argv[], char* env[])
//{
//   if(argc == 2)
//   {
//    sleep(30);
//    printf("change begin\n");
//       chdir(argv[1]);
//    printf("change end\n");
//   sleep(30);
//   }
//
//    return 0;
//}

// 除了命令行参数列表，main函数默认还有一个环境变量表
// 可以验证子进程会继承父进程的环境变量
// 也可以验证子进程不会继承父进程的本地变量
//int main(int argc, char* argv[], char* env[])
//{
//    
//    int i = 0;
//    for(; env[i]; i++)
//    {
//        // 打印出所有的环境变量
//        printf("%s\n", env[i]);
//    }
//
//
//    return 0;
//}

// getenv()获取单个指定的环境变量
//int main()
//{
//
//    printf("USER: %s\n", getenv("USER"));
//    printf("PATH: %s\n", getenv("PATH"));
//    printf("HOME: %s\n", getenv("HOME"));
//
//    return 0;
//}



// 基于上述原因，可以解释为什么指令加不同的参数执行不同的内容
//int main(int argc, char* argv[])
//{
//
//    if(argc != 2)
//    {
//        printf("corret style: ./proc -[a|b|c|d|e]\n");
//        return 0;
//    }
//    
//
//        
//    if(strcmp(argv[1], "-a") == 0)
//    {
//        printf("功能1\n");
//    }
//    else if(strcmp(argv[1], "-b") == 0)
//    {
//        printf("功能2\n");
//    }
//    else if(strcmp(argv[1], "-c") == 0)
//    {
//        printf("功能3\n");
//    }
//    else if(strcmp(argv[1], "-d") == 0)
//    {
//        printf("功能4\n");
//    }
//    else 
//    {
//        printf("功能5\n");
//    }
//
//    return 0;
//}



// 命令行参数
// argc-命令行参数的个数， argv-命令行参数表并且默认命令行参数表最后一个值为NULL
//int main(int argc, char* argv[])
//{
//    // 遍历打印命令行参数的内容
//    int i = 0;
//    for(; i < argc; i++)
//    {
//        printf("argv[%d]->%s\n", i, argv[i]);
//    }
//    
//    // 因为命令行参数表默认最后一个值为NULL,所以可以用如下方式打印
//    int j = 0;
//    for(; argv[j]; j++)
//    {
//        printf("argv[%d]->%s\n", j, argv[j]);
//    }
//
//    return 0;
//}
//




//int main()
//{
//    
//
//
//
//
//
//    // 增加一个环境变量的PATH，可以直接使用当前目录下的可执行文件，执行程序。
//    // printf("i am a process\n");
//
//    return 0;
//}
